#pragma once

// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the MNISTDIGIT_EXPORTS
// symbol defined on the command line. This symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// MNISTDIGIT_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef MNISTDIGIT_EXPORTS
#define MNISTDIGIT_API __declspec(dllexport)
#else
#define MNISTDIGIT_API __declspec(dllimport)
#endif
namespace MnistDigit
{
	class MNISTDIGIT_API Digit
	{
	public:
		Digit(const unsigned char digitValue
			, const std::vector<unsigned char>& data);
		~Digit(void);

		const std::vector<double>& GetInput() const;
		void SetOutput(const std::vector<double>& output);
		bool IsClassified() const;
		const std::vector<double>& GetDesired() const;
	private:
		Digit& operator=(const Digit&);
		const size_t m_desiredClass;
		size_t m_class;
#pragma warning( push )
#pragma warning( disable : 4251 )
		const std::vector<unsigned char> m_data;
		std::vector<double> m_input;
		std::vector<double> m_output;
#pragma warning( pop )
	};

}